/**
 * 暂时记录，不作为生产文件输出
 */

Function.prototype.before = function(beforeFn) {
  const __self = this // 保存原函数的引用

  // 返回包含了原函数和新函数的“代理”函数
  return function() {
    beforeFn.apply(this, arguments) // 执行新函数，修正this
    return __self.apply(this, arguments) // 执行原函数
  }
}

Function.prototype.after = function(afterFn) {
  const __self = this

  return function() {
    const ret = __self.apply(this, arguments)
    afterFn.apply(this, arguments)
    return ret
  }
}

const func = function() {
  console.log(2)
}

// 输出顺序为，1 2 3
func.before(() => console.log(1)).after(() => console.log(3))()
